var Ret = require("./ret.js");
var validator = require("validator");

module.exports = class Param {
  /**
   * 基本沿用validator的方法，https://www.npmjs.com/package/validator
   * check方法新增isNotEmpty, require。支持多个，空格隔开。默认is类的方法不含空
   * @param {Array} checkList - 两重数组，每一个单独数组：[key, value, checkMethod, tips, defaultValue]
   * @returns
   */
  static async checkParams(checkList) {
    let params = {};
    checkList.forEach((nCheck) => {
      const value = nCheck[1];
      const checkMethod = nCheck[2];
      // 检查，不对就返回
      if (checkMethod != "") {
        checkMethod.split(" ").forEach((nChecker) => {
          let result = false;
          if (nChecker === "require" || nChecker === "isNotEmpty") {
            // 支持同时多个有一个存在
            if (value instanceof Array) {
              value.forEach((n) => {
                if (!this.isBlank(n)) {
                  result = true;
                }
              });
            } else {
              result = !this.isBlank(value);
            }
          } else {
            // 空值默认通过
            if (!this.isBlank(value)) {
              result = validator[nChecker](value + "");
            } else {
              result = true;
            }
          }
          if (!result) {
            throw "参数：" + nCheck[3];
          }
        });
      }
      // 处理默认值
      const defaultValue = nCheck[4];
      if (defaultValue != undefined && this.isBlank(value)) {
        params[nCheck[0]] = defaultValue;
      } else {
        // 处理非文本空值
        if (
          value === "" &&
          (checkMethod.includes("isInt") || checkMethod.includes("isNumeric"))
        ) {
          params[nCheck[0]] = null;
        } else {
          // 多个的只判断不用放到返回中
          if (value instanceof Array === false) {
            params[nCheck[0]] = value;
          }
        }
      }
    });
    return params;
  }

  /**
   * 判断是否为空，含undefined，null，空文本
   * @param {*} value
   * @returns {boolean}
   */
  static isBlank(value) {
    return value === undefined || value === null || value === "";
  }
};
